package com.heima.common;

import com.heima.result.Result;
import com.heima.tokend.TokenException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;


// 1. 加了这个注解，所有从控制器抛出的异常，会被统一收集到这个位置
// 这个类一般放在 handler 目录下，这个类因为是捕获controller的异常，所以要和controller放一个模块下
@RestControllerAdvice
public class GlobalExceptionHandler {

    // 2. 用方法来体现具体捕获什么类型的异常
    // @ExceptionHandler 这个注解，用来指定要捕获的异常类型
    // 参数一：异常的类型，传的是异常类
    // 方法接收一个参数，这个参数就是被捕获到的异常对象
    // 方法处理完相关逻辑之后，可以直接给前端返回一个结果，这个结果可以是统一的返回值结构
    @ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public Result exceptionHandler(RuntimeException e) {
        // 3. 一般情况下，在这个类里面，添加的是打印日志
        return Result.error("服务器异常，请稍后再试");
    }

    @ExceptionHandler(TokenException.class)
    public Result tokenException(){
        return Result.error("Token失效");
    }
}
